const WebSocket = require('ws');

// 测试1339指令的数据格式
async function test1339FieldMapping() {
    console.log('🧪 开始测试1339指令数据格式...');

    const ws = new WebSocket('ws://localhost:3001');

    ws.on('open', () => {
        console.log('✅ WebSocket连接已建立');

        // 发送1339指令
        const message = {
            c: 1339,
            d: { pageNum: 0 }
        };

        console.log('📤 发送指令:', JSON.stringify(message, null, 2));
        ws.send(JSON.stringify(message));
    });

    ws.on('message', (data) => {
        try {
            const response = JSON.parse(data.toString());
            console.log('📥 接收到响应:', JSON.stringify(response, null, 2));

            // 验证响应格式
            validate1339Response(response);

            ws.close();
        } catch (error) {
            console.error('❌ 解析响应失败:', error);
            ws.close();
        }
    });

    ws.on('error', (error) => {
        console.error('❌ WebSocket错误:', error);
    });

    ws.on('close', () => {
        console.log('🔌 WebSocket连接已关闭');
    });
}

function validate1339Response(response) {
    console.log('\n🔍 开始验证1339指令响应格式...');

    // 检查基本结构
    if (!response.act_id || response.act_id !== 1339) {
        console.error('❌ act_id字段错误:', response.act_id);
        return false;
    }

    if (response.code !== 0) {
        console.error('❌ code字段错误:', response.code);
        return false;
    }

    if (!Array.isArray(response.list)) {
        console.error('❌ list字段不是数组:', response.list);
        return false;
    }

    // 检查是否包含不应该存在的字段
    const unexpectedFields = ['page', 'sum'];
    for (const field of unexpectedFields) {
        if (response.hasOwnProperty(field)) {
            console.error(`❌ 包含不应该存在的字段: ${field}`);
            return false;
        }
    }

    // 验证list中的每个项目
    if (response.list.length > 0) {
        const firstItem = response.list[0];
        const requiredFields = [
            'creation_date', 'descr', 'game_id', 'gold', 'id', 'sliver', 'status', 'type'
        ];

        for (const field of requiredFields) {
            if (!firstItem.hasOwnProperty(field)) {
                console.error(`❌ list项目缺少必需字段: ${field}`);
                return false;
            }
        }

        // 验证字段类型和格式
        if (typeof firstItem.creation_date !== 'string') {
            console.error('❌ creation_date字段类型错误:', typeof firstItem.creation_date);
        }

        if (typeof firstItem.descr !== 'string') {
            console.error('❌ descr字段类型错误:', typeof firstItem.descr);
        }

        if (typeof firstItem.game_id !== 'number') {
            console.error('❌ game_id字段类型错误:', typeof firstItem.game_id);
        }

        if (typeof firstItem.gold !== 'number') {
            console.error('❌ gold字段类型错误:', typeof firstItem.gold);
        }

        if (typeof firstItem.id !== 'number') {
            console.error('❌ id字段类型错误:', typeof firstItem.id);
        }

        if (typeof firstItem.sliver !== 'number') {
            console.error('❌ sliver字段类型错误:', typeof firstItem.sliver);
        }

        if (typeof firstItem.status !== 'number') {
            console.error('❌ status字段类型错误:', typeof firstItem.status);
        }

        if (typeof firstItem.type !== 'number') {
            console.error('❌ type字段类型错误:', typeof firstItem.type);
        }

        console.log('✅ list项目字段验证通过');
    }

    console.log('✅ 1339指令响应格式验证完成！');
    console.log('📊 响应结构符合标准指令要求');

    return true;
}

// 运行测试
test1339FieldMapping().catch(console.error); 